<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    // 返回值
    // function fn(){
    //     var name='hello'
    //     return function(){
    //         return name
    //     }
    // }
    // var a=fn()
    // console.log(a());

    //函数赋值
    // var p;
    // function fn(){
    //     var name='hello2'
    //     // 将函数赋值给p
    //     fn1=()=>{
    //        return name
    //     }
    // }
    // fn()
    // console.log(fn1());


    // getter和setter
    // function fn() {
    //     var name = 'hello'
    //     setName = function (n) {
    //         name = n;
    //     }
    //     getName = function () {
    //         return name;
    //     }

    //     //将setName，getName作为对象的属性返回
    //     return {
    //         setName: setName,
    //         getName: getName
    //     }
    // }
    // var fn1 = fn();//返回对象，属性setName和getName是两个函数
    // console.log(fn1.getName());//getter
    // fn1.setName('world');//setter修改闭包里面的name
    // console.log(fn1.getName());//getter


    // 函数传参
    function fn() {
        var name = "hello";
        return function callback() {
            return name;
        }
    }
    var fn1 = fn()//执行函数将返回值（callback函数）赋值给fn1，

    function fn2(f) {
        //将函数作为参数传入
        console.log(f());//执行函数，并输出
    }
    fn2(fn1)//执行输出fn2
</script>